package com.task.core.service;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URISyntaxException;
import java.security.NoSuchAlgorithmException;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import com.task.core.domain.SysFileInfo;
import com.task.core.dto.request.SysFileRequestDTO;
import com.task.core.dto.request.SysFilesRequestDTO;

/**
 * @author 迪迦.
 * @date 2024/9/14 14:12
 */
public interface SysFileService {

  /**
   * 通用上传文件,上传到本地服务器
   * @param request 请求参数
   * @param userid  用户id
   * @return  文件信息
   */
  SysFileInfo upload(SysFileRequestDTO request, Long userid) throws IOException, URISyntaxException;

  /**
   * 上传脚本文件,上传到aswS3服务器
   * @param request 请求参数
   * @param userid  用户id
   * @return  文件信息
   */
  SysFileInfo uploadScript(SysFileRequestDTO request, Long userid) throws IOException, URISyntaxException, NoSuchAlgorithmException;

  /**
   * 根据文件code获取文件信息
   * @param code  文件code
   * @return  文件信息
   */
  SysFileInfo getFileByCode(String code);

  /**
   * 根据文件上传来源code批量获取文件集合
   * @param fromCode  来源code
   * @return  文件信息集合
   */
  List<SysFileInfo> getFilesByFromCode(String fromCode);

  /**
   * 分页获取文件上传历史
   * @param request 请求参数
   * @return  分页集合
   */
  List<SysFileInfo> getFilesByPage(SysFileRequestDTO request);

  /**
   * 下载文件,只支持本地服务器存贮的,如果要通过系统下载aswS3的文件可以添加,因为可以直接通过fileInfo里面的url浏览器中下载,就没加
   * @param code  fileCode
   * @param response  请求
   */
  void download(String code, HttpServletResponse response) throws UnsupportedEncodingException;

  /**
   * 上传脚本文件，根据脚本类型,上传到aswS3服务器
   * @param request
   * @return
   */
  SysFileInfo uploadScriptType(SysFilesRequestDTO request) throws IOException, URISyntaxException, NoSuchAlgorithmException;
}
